[INFO] cloning repository https://github.com/qianyuchen-git/mini-redis
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/qianyuchen-git/mini-redis" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fqianyuchen-git%2Fmini-redis", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fqianyuchen-git%2Fmini-redis'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 89da583ca0eb1608559864a1912e1c1cb2c3c519
[INFO] fixing qianyuchen-git/mini-redis against try#622891a4e29178280638a6b63a8908bde2c0c854+cargoflags=-Zfix-edition=start=2015 for pr-157817-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fqianyuchen-git%2Fmini-redis" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/qianyuchen-git/mini-redis
[INFO] finished tweaking git repo https://github.com/qianyuchen-git/mini-redis
[INFO] tweaked toml for git repo https://github.com/qianyuchen-git/mini-redis written to /workspace/builds/worker-4-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/qianyuchen-git/mini-redis on toolchain 622891a4e29178280638a6b63a8908bde2c0c854
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/qianyuchen-git/mini-redis already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3a6becf2bc8dde7f3fa57ede90e4f284e72d296796fc446bbb1e2c7cc0530151" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] fdb9e664c1267dcbc39cc51aec25321939d08ced2c8ce759b871f61c245f51f3
[INFO] running `Command { std: "docker" "start" "fdb9e664c1267dcbc39cc51aec25321939d08ced2c8ce759b871f61c245f51f3", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "fdb9e664c1267dcbc39cc51aec25321939d08ced2c8ce759b871f61c245f51f3" "/opt/rustwide/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "fdb9e664c1267dcbc39cc51aec25321939d08ced2c8ce759b871f61c245f51f3", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=" "-e" "RUSTDOCFLAGS=" "-w" "/opt/rustwide/workdir" "--user" "0:0" "fdb9e664c1267dcbc39cc51aec25321939d08ced2c8ce759b871f61c245f51f3" "/opt/rustwide/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "fix" "--allow-no-vcs" "--allow-dirty" "--frozen" "--all" "--all-targets" "--message-format=json" "-Zfix-edition=start=2015", kill_on_drop: false }`
[INFO] [stderr]    Compiling zerocopy v0.8.39
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking mio v1.1.0
[INFO] [stderr]    Compiling syn v2.0.111
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]     Checking tokio v1.48.0
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking mini-redis v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error[E0106]: missing lifetime specifier
[INFO] [stdout]   --> examples/http_server.rs:56:52
[INFO] [stdout]    |
[INFO] [stdout] 56 | fn read_line(cursor: &mut Cursor<&[u8]>) -> Option<&[u8]> {
[INFO] [stdout]    |                      ------------------            ^ expected named lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout]    = help: this function's return type contains a borrowed value, but the signature does not say which one of `cursor`'s 2 lifetimes it is borrowed from
[INFO] [stdout] help: consider introducing a named lifetime parameter
[INFO] [stdout]    |
[INFO] [stdout] 56 | fn read_line<'a>(cursor: &'a mut Cursor<&'a [u8]>) -> Option<&'a [u8]> {
[INFO] [stdout]    |             ++++          ++             ++                   ++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::Add`
[INFO] [stdout]  --> examples/playground.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ops::Add;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `sleep` and `timeout`
[INFO] [stdout]  --> examples/playground.rs:5:29
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::time::{Duration, sleep, timeout};
[INFO] [stdout]   |                             ^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find module or crate `base64` in this scope
[INFO] [stdout]   --> examples/websocket.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use base64::engine::general_purpose::STANDARD as BASE64;
[INFO] [stdout]    |     ^^^^^^ use of unresolved module or unlinked crate `base64`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `base64`, use `cargo add base64` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `base64`
[INFO] [stdout]   --> examples/websocket.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use base64::Engine;
[INFO] [stdout]    |     ^^^^^^ use of unresolved module or unlinked crate `base64`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `base64`, use `cargo add base64` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `sha1`
[INFO] [stdout]   --> examples/websocket.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use sha1::{Digest, Sha1};
[INFO] [stdout]    |     ^^^^ use of unresolved module or unlinked crate `sha1`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `sha1`, use `cargo add sha1` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> examples/websocket.rs:103:8
[INFO] [stdout]     |
[INFO] [stdout] 103 |     if (request.headers.get("upgrade").map(|v| v.to_lowercase()) != Some("websocket".to_string())) {
[INFO] [stdout]     |        ^                                                                                         ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 103 -     if (request.headers.get("upgrade").map(|v| v.to_lowercase()) != Some("websocket".to_string())) {
[INFO] [stdout] 103 +     if request.headers.get("upgrade").map(|v| v.to_lowercase()) != Some("websocket".to_string()) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> examples/websocket.rs:168:15
[INFO] [stdout]     |
[INFO] [stdout] 168 |             if(!frame.fin) {
[INFO] [stdout]     |               ^          ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 168 -             if(!frame.fin) {
[INFO] [stdout] 168 +             if !frame.fin {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `postion` in this scope
[INFO] [stdout]   --> examples/http_server.rs:59:14
[INFO] [stdout]    |
[INFO] [stdout] 59 |     for i in postion..data.len() - 1 {
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: a local variable with a similar name exists
[INFO] [stdout]    |
[INFO] [stdout] 59 |     for i in position..data.len() - 1 {
[INFO] [stdout]    |                 +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Buf` and `BytesMut`
[INFO] [stdout]   --> examples/http_server.rs:19:13
[INFO] [stdout]    |
[INFO] [stdout] 19 | use bytes::{Buf, BytesMut};
[INFO] [stdout]    |             ^^^  ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Read` and `Write`
[INFO] [stdout]   --> examples/http_server.rs:21:23
[INFO] [stdout]    |
[INFO] [stdout] 21 | use std::io::{Cursor, Read, Write};
[INFO] [stdout]    |                       ^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `parse_state` should have an upper camel case name
[INFO] [stdout]   --> examples/http_server.rs:39:6
[INFO] [stdout]    |
[INFO] [stdout] 39 | enum parse_state {
[INFO] [stdout]    |      ^^^^^^^^^^^ help: convert the identifier to upper camel case: `ParseState`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `crate::pubsub`
[INFO] [stdout]  --> src/server.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::pubsub;
[INFO] [stdout]   |     ^^^^^^^------
[INFO] [stdout]   |            |
[INFO] [stdout]   |            no `pubsub` in the root
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `crate::pubsub`
[INFO] [stdout]  --> src/server.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::pubsub::PubSub;
[INFO] [stdout]   |            ^^^^^^ could not find `pubsub` in the crate root
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `tokio_stream`
[INFO] [stdout]   --> src/server.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tokio_stream::StreamExt;
[INFO] [stdout]    |     ^^^^^^^^^^^^ use of unresolved module or unlinked crate `tokio_stream`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tokio_stream`, use `cargo add tokio_stream` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find module or crate `tokio_stream` in this scope
[INFO] [stdout]   --> src/server.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use tokio_stream::wrappers::BroadcastStream;
[INFO] [stdout]    |     ^^^^^^^^^^^^ use of unresolved module or unlinked crate `tokio_stream`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tokio_stream`, use `cargo add tokio_stream` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `tokio_stream`
[INFO] [stdout]   --> src/server.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use tokio_stream::StreamMap;
[INFO] [stdout]    |     ^^^^^^^^^^^^ use of unresolved module or unlinked crate `tokio_stream`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tokio_stream`, use `cargo add tokio_stream` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `j`
[INFO] [stdout]   --> examples/playground.rs:44:17
[INFO] [stdout]    |
[INFO] [stdout] 44 |             for j in 0..100 {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_j`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt::Debug`
[INFO] [stdout]  --> src/store/skiplist.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::fmt::Debug;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `OpenOptions`
[INFO] [stdout]  --> src/db.rs:2:21
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::fs::{File, OpenOptions};
[INFO] [stdout]   |                     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::iter::Filter`
[INFO] [stdout]  --> src/db.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::iter::Filter;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/db.rs:7:17
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SystemTime` and `UNIX_EPOCH`
[INFO] [stdout]  --> src/db.rs:8:17
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::time::{SystemTime, UNIX_EPOCH};
[INFO] [stdout]   |                 ^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::queue::CommandQueue`
[INFO] [stdout]  --> src/server.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::queue::CommandQueue;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `core::error`
[INFO] [stdout]  --> src/server.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use core::error;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]    --> examples/playground.rs:117:13
[INFO] [stdout]     |
[INFO] [stdout] 117 |         for i in 0..20 {
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::process::Command`
[INFO] [stdout]   --> src/server.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use std::process::Command;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::watch`
[INFO] [stdout]   --> src/server.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tokio::sync::watch;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/server.rs:74:39
[INFO] [stdout]    |
[INFO] [stdout] 74 | ...                   if(cmd_name == "SUBSCRIBE"){
[INFO] [stdout]    |                         ^                       ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 74 -                                     if(cmd_name == "SUBSCRIBE"){
[INFO] [stdout] 74 +                                     if cmd_name == "SUBSCRIBE" {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `exercise_1_basic_spawn` is never used
[INFO] [stdout]   --> examples/playground.rs:13:4
[INFO] [stdout]    |
[INFO] [stdout] 13 | fn exercise_1_basic_spawn() {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/server.rs:101:44
[INFO] [stdout]     |
[INFO] [stdout] 101 | ...                   else if(cmd_name == "UNSUBSCRIBE") {
[INFO] [stdout]     |                              ^                         ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 101 -                                     else if(cmd_name == "UNSUBSCRIBE") {
[INFO] [stdout] 101 +                                     else if cmd_name == "UNSUBSCRIBE" {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `exercise_2_shared_counter` is never used
[INFO] [stdout]   --> examples/playground.rs:37:4
[INFO] [stdout]    |
[INFO] [stdout] 37 | fn exercise_2_shared_counter() {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `exercise_3_producer_consumer` is never used
[INFO] [stdout]   --> examples/playground.rs:56:4
[INFO] [stdout]    |
[INFO] [stdout] 56 | fn exercise_3_producer_consumer() {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]     --> src/server.rs:1122:16
[INFO] [stdout]      |
[INFO] [stdout] 1122 |             if (array.len() != 3) {
[INFO] [stdout]      |                ^                ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]      |
[INFO] [stdout] 1122 -             if (array.len() != 3) {
[INFO] [stdout] 1122 +             if array.len() != 3 {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `socket`
[INFO] [stdout]   --> examples/http_server.rs:48:10
[INFO] [stdout]    |
[INFO] [stdout] 48 |     let (socket, addr) = listen.accept().expect("Failed to accept connection");
[INFO] [stdout]    |          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_socket`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]     --> src/server.rs:1168:16
[INFO] [stdout]      |
[INFO] [stdout] 1168 |             if (array.len() != 2) {
[INFO] [stdout]      |                ^                ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]      |
[INFO] [stdout] 1168 -             if (array.len() != 2) {
[INFO] [stdout] 1168 +             if array.len() != 2 {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stream`
[INFO] [stdout]   --> examples/http_server.rs:52:17
[INFO] [stdout]    |
[INFO] [stdout] 52 | fn read_request(stream: &mut TcpStream) -> Option<HttpRequest> {
[INFO] [stdout]    |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_stream`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]     --> src/server.rs:1187:16
[INFO] [stdout]      |
[INFO] [stdout] 1187 |             if (array.len() != 3) {
[INFO] [stdout]      |                ^                ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]      |
[INFO] [stdout] 1187 -             if (array.len() != 3) {
[INFO] [stdout] 1187 +             if array.len() != 3 {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]     --> src/server.rs:1243:16
[INFO] [stdout]      |
[INFO] [stdout] 1243 |             if (array.len() != 2) {
[INFO] [stdout]      |                ^                ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]      |
[INFO] [stdout] 1243 -             if (array.len() != 2) {
[INFO] [stdout] 1243 +             if array.len() != 2 {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0106, E0425.
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `crate::pubsub`
[INFO] [stdout]  --> src/server.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::pubsub;
[INFO] [stdout]   |     ^^^^^^^------
[INFO] [stdout]   |            |
[INFO] [stdout]   |            no `pubsub` in the root
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0106`.
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `crate::pubsub`
[INFO] [stdout]  --> src/server.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::pubsub::PubSub;
[INFO] [stdout]   |            ^^^^^^ could not find `pubsub` in the crate root
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `tokio_stream`
[INFO] [stdout]   --> src/server.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tokio_stream::StreamExt;
[INFO] [stdout]    |     ^^^^^^^^^^^^ use of unresolved module or unlinked crate `tokio_stream`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tokio_stream`, use `cargo add tokio_stream` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find module or crate `tokio_stream` in this scope
[INFO] [stdout]   --> src/server.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use tokio_stream::wrappers::BroadcastStream;
[INFO] [stdout]    |     ^^^^^^^^^^^^ use of unresolved module or unlinked crate `tokio_stream`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tokio_stream`, use `cargo add tokio_stream` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `tokio_stream`
[INFO] [stdout]   --> src/server.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use tokio_stream::StreamMap;
[INFO] [stdout]    |     ^^^^^^^^^^^^ use of unresolved module or unlinked crate `tokio_stream`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tokio_stream`, use `cargo add tokio_stream` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt::Debug`
[INFO] [stdout]  --> src/store/skiplist.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::fmt::Debug;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `OpenOptions`
[INFO] [stdout]  --> src/db.rs:2:21
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::fs::{File, OpenOptions};
[INFO] [stdout]   |                     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::iter::Filter`
[INFO] [stdout]  --> src/db.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::iter::Filter;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/db.rs:7:17
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SystemTime` and `UNIX_EPOCH`
[INFO] [stdout]  --> src/db.rs:8:17
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::time::{SystemTime, UNIX_EPOCH};
[INFO] [stdout]   |                 ^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::queue::CommandQueue`
[INFO] [stdout]  --> src/server.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::queue::CommandQueue;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `core::error`
[INFO] [stdout]  --> src/server.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use core::error;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::process::Command`
[INFO] [stdout]   --> src/server.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use std::process::Command;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::watch`
[INFO] [stdout]   --> src/server.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tokio::sync::watch;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/server.rs:74:39
[INFO] [stdout]    |
[INFO] [stdout] 74 | ...                   if(cmd_name == "SUBSCRIBE"){
[INFO] [stdout]    |                         ^                       ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 74 -                                     if(cmd_name == "SUBSCRIBE"){
[INFO] [stdout] 74 +                                     if cmd_name == "SUBSCRIBE" {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `mini-redis` (example "http_server") due to 2 previous errors; 5 warnings emitted
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/server.rs:101:44
[INFO] [stdout]     |
[INFO] [stdout] 101 | ...                   else if(cmd_name == "UNSUBSCRIBE") {
[INFO] [stdout]     |                              ^                         ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 101 -                                     else if(cmd_name == "UNSUBSCRIBE") {
[INFO] [stdout] 101 +                                     else if cmd_name == "UNSUBSCRIBE" {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]     --> src/server.rs:1122:16
[INFO] [stdout]      |
[INFO] [stdout] 1122 |             if (array.len() != 3) {
[INFO] [stdout]      |                ^                ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]      |
[INFO] [stdout] 1122 -             if (array.len() != 3) {
[INFO] [stdout] 1122 +             if array.len() != 3 {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]     --> src/server.rs:1168:16
[INFO] [stdout]      |
[INFO] [stdout] 1168 |             if (array.len() != 2) {
[INFO] [stdout]      |                ^                ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]      |
[INFO] [stdout] 1168 -             if (array.len() != 2) {
[INFO] [stdout] 1168 +             if array.len() != 2 {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]     --> src/server.rs:1187:16
[INFO] [stdout]      |
[INFO] [stdout] 1187 |             if (array.len() != 3) {
[INFO] [stdout]      |                ^                ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]      |
[INFO] [stdout] 1187 -             if (array.len() != 3) {
[INFO] [stdout] 1187 +             if array.len() != 3 {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]     --> src/server.rs:1243:16
[INFO] [stdout]      |
[INFO] [stdout] 1243 |             if (array.len() != 2) {
[INFO] [stdout]      |                ^                ^
[INFO] [stdout]      |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]      |
[INFO] [stdout] 1243 -             if (array.len() != 2) {
[INFO] [stdout] 1243 +             if array.len() != 2 {
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `addr`
[INFO] [stdout]   --> examples/websocket.rs:75:22
[INFO] [stdout]    |
[INFO] [stdout] 75 |         let (socket, addr) = listener
[INFO] [stdout]    |                      ^^^^ help: if this is intentional, prefix it with an underscore: `_addr`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `payload_len` is never read
[INFO] [stdout]    --> examples/websocket.rs:270:27
[INFO] [stdout]     |
[INFO] [stdout] 270 |       let mut payload_len = 0; // TODO: 实现长度解析逻辑
[INFO] [stdout]     |                             ^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 285 | /         payload_len = u64::from_be_bytes([
[INFO] [stdout] 286 | |             buffer[2], buffer[3], buffer[4], buffer[5], buffer[6], buffer[7], buffer[8], buffer[9],
[INFO] [stdout] 287 | |         ]) as usize;
[INFO] [stdout]     | |___________________- `payload_len` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0432, E0433.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0432`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `mini-redis` (example "websocket") due to 3 previous errors; 4 warnings emitted
[INFO] [stdout] warning: unused import: `Read`
[INFO] [stdout]  --> src/resp.rs:4:24
[INFO] [stdout]   |
[INFO] [stdout] 4 |     io::{self, Cursor, Read},
[INFO] [stdout]   |                        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]   --> src/store/skiplist.rs:85:30
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub fn insert(&mut self, key: K, value: V) -> bool {
[INFO] [stdout]    |                              ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]   --> src/store/skiplist.rs:85:38
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub fn insert(&mut self, key: K, value: V) -> bool {
[INFO] [stdout]    |                                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]   --> src/store/skiplist.rs:96:23
[INFO] [stdout]    |
[INFO] [stdout] 96 |     pub fn get(&self, key: &K) -> Option<&V> {
[INFO] [stdout]    |                       ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/store/skiplist.rs:103:30
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub fn remove(&mut self, key: &K) -> Option<V> {
[INFO] [stdout]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]    --> src/store/skiplist.rs:113:31
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub fn get_by_rank(&self, rank: usize) -> Option<(&K, &V)> {
[INFO] [stdout]     |                               ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/store/skiplist.rs:120:28
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub fn get_rank(&self, key: &K) -> Option<usize> {
[INFO] [stdout]     |                            ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/store/skiplist.rs:127:25
[INFO] [stdout]     |
[INFO] [stdout] 127 |     pub fn range(&self, start: usize, end: usize) -> Vec<(&K, &V)> {
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/store/skiplist.rs:127:39
[INFO] [stdout]     |
[INFO] [stdout] 127 |     pub fn range(&self, start: usize, end: usize) -> Vec<(&K, &V)> {
[INFO] [stdout]     |                                       ^^^ help: if this is intentional, prefix it with an underscore: `_end`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n`
[INFO] [stdout]    --> src/store/hashtable.rs:119:31
[INFO] [stdout]     |
[INFO] [stdout] 119 |     fn rehash_step(&mut self, n: usize) {
[INFO] [stdout]     |                               ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/store/hashtable.rs:128:30
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub fn insert(&mut self, key: K, value: V) -> Option<V> {
[INFO] [stdout]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/store/hashtable.rs:128:38
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub fn insert(&mut self, key: K, value: V) -> Option<V> {
[INFO] [stdout]     |                                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/store/hashtable.rs:139:23
[INFO] [stdout]     |
[INFO] [stdout] 139 |     pub fn get(&self, key: &K) -> Option<&V> {
[INFO] [stdout]     |                       ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/store/hashtable.rs:147:31
[INFO] [stdout]     |
[INFO] [stdout] 147 |     pub fn get_mut(&mut self, key: &K) -> Option<&mut V> {
[INFO] [stdout]     |                               ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/store/hashtable.rs:153:30
[INFO] [stdout]     |
[INFO] [stdout] 153 |     pub fn remove(&mut self, key: &K) -> Option<V> {
[INFO] [stdout]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/store/ziplist.rs:42:13
[INFO] [stdout]    |
[INFO] [stdout] 42 |         let mut data = Vec::with_capacity(Self::HEADER_SIZE + 1);
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]   --> src/store/ziplist.rs:68:33
[INFO] [stdout]    |
[INFO] [stdout] 68 |     pub fn push_back(&mut self, value: &[u8]) {
[INFO] [stdout]    |                                 ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]   --> src/store/ziplist.rs:78:34
[INFO] [stdout]    |
[INFO] [stdout] 78 |     pub fn push_front(&mut self, value: &[u8]) {
[INFO] [stdout]    |                                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]   --> src/store/ziplist.rs:97:23
[INFO] [stdout]    |
[INFO] [stdout] 97 |     pub fn get(&self, index: usize) -> Option<Vec<u8>> {
[INFO] [stdout]    |                       ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/store/ziplist.rs:104:30
[INFO] [stdout]     |
[INFO] [stdout] 104 |     pub fn remove(&mut self, index: usize) -> Option<Vec<u8>> {
[INFO] [stdout]     |                              ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/store/ziplist.rs:111:30
[INFO] [stdout]     |
[INFO] [stdout] 111 |     fn try_encode_int(&self, value: &[u8]) -> Option<(Encoding, i64)> {
[INFO] [stdout]     |                              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `len`
[INFO] [stdout]    --> src/store/ziplist.rs:118:31
[INFO] [stdout]     |
[INFO] [stdout] 118 |     fn encode_prev_len(&self, len: usize) -> Vec<u8> {
[INFO] [stdout]     |                               ^^^ help: if this is intentional, prefix it with an underscore: `_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `offset`
[INFO] [stdout]    --> src/store/ziplist.rs:126:31
[INFO] [stdout]     |
[INFO] [stdout] 126 |     fn decode_prev_len(&self, offset: usize) -> (usize, usize) {
[INFO] [stdout]     |                               ^^^^^^ help: if this is intentional, prefix it with an underscore: `_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `prev_len`
[INFO] [stdout]    --> src/store/ziplist.rs:133:28
[INFO] [stdout]     |
[INFO] [stdout] 133 |     fn encode_entry(&self, prev_len: usize, value: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |                            ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_prev_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/store/ziplist.rs:133:45
[INFO] [stdout]     |
[INFO] [stdout] 133 |     fn encode_entry(&self, prev_len: usize, value: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |                                             ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `offset`
[INFO] [stdout]    --> src/store/ziplist.rs:140:28
[INFO] [stdout]     |
[INFO] [stdout] 140 |     fn decode_entry(&self, offset: usize) -> Option<ZipListEntry> {
[INFO] [stdout]     |                            ^^^^^^ help: if this is intentional, prefix it with an underscore: `_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]   --> src/store/timingwheel.rs:80:32
[INFO] [stdout]    |
[INFO] [stdout] 80 |     pub fn add_task(&mut self, data: T, delay: Duration) {
[INFO] [stdout]    |                                ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delay`
[INFO] [stdout]   --> src/store/timingwheel.rs:80:41
[INFO] [stdout]    |
[INFO] [stdout] 80 |     pub fn add_task(&mut self, data: T, delay: Duration) {
[INFO] [stdout]    |                                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_delay`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `elapsed`
[INFO] [stdout]    --> src/store/timingwheel.rs:101:31
[INFO] [stdout]     |
[INFO] [stdout] 101 |     pub fn advance(&mut self, elapsed: Duration) -> Vec<T> {
[INFO] [stdout]     |                               ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_elapsed`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delay`
[INFO] [stdout]    --> src/store/timingwheel.rs:109:30
[INFO] [stdout]     |
[INFO] [stdout] 109 |     fn calculate_slot(&self, delay: Duration) -> (usize, usize) {
[INFO] [stdout]     |                              ^^^^^ help: if this is intentional, prefix it with an underscore: `_delay`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]    --> src/store/timingwheel.rs:166:32
[INFO] [stdout]     |
[INFO] [stdout] 166 |     pub fn add_task(&mut self, data: T, delay: Duration) {
[INFO] [stdout]     |                                ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delay`
[INFO] [stdout]    --> src/store/timingwheel.rs:166:41
[INFO] [stdout]     |
[INFO] [stdout] 166 |     pub fn add_task(&mut self, data: T, delay: Duration) {
[INFO] [stdout]     |                                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_delay`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Read`
[INFO] [stdout]  --> src/resp.rs:4:24
[INFO] [stdout]   |
[INFO] [stdout] 4 |     io::{self, Cursor, Read},
[INFO] [stdout]   |                        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]   --> src/store/skiplist.rs:85:30
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub fn insert(&mut self, key: K, value: V) -> bool {
[INFO] [stdout]    |                              ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]   --> src/store/skiplist.rs:85:38
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub fn insert(&mut self, key: K, value: V) -> bool {
[INFO] [stdout]    |                                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]   --> src/store/skiplist.rs:96:23
[INFO] [stdout]    |
[INFO] [stdout] 96 |     pub fn get(&self, key: &K) -> Option<&V> {
[INFO] [stdout]    |                       ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/store/skiplist.rs:103:30
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub fn remove(&mut self, key: &K) -> Option<V> {
[INFO] [stdout]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]    --> src/store/skiplist.rs:113:31
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub fn get_by_rank(&self, rank: usize) -> Option<(&K, &V)> {
[INFO] [stdout]     |                               ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/store/skiplist.rs:120:28
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub fn get_rank(&self, key: &K) -> Option<usize> {
[INFO] [stdout]     |                            ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/store/skiplist.rs:127:25
[INFO] [stdout]     |
[INFO] [stdout] 127 |     pub fn range(&self, start: usize, end: usize) -> Vec<(&K, &V)> {
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/store/skiplist.rs:127:39
[INFO] [stdout]     |
[INFO] [stdout] 127 |     pub fn range(&self, start: usize, end: usize) -> Vec<(&K, &V)> {
[INFO] [stdout]     |                                       ^^^ help: if this is intentional, prefix it with an underscore: `_end`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n`
[INFO] [stdout]    --> src/store/hashtable.rs:119:31
[INFO] [stdout]     |
[INFO] [stdout] 119 |     fn rehash_step(&mut self, n: usize) {
[INFO] [stdout]     |                               ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/store/hashtable.rs:128:30
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub fn insert(&mut self, key: K, value: V) -> Option<V> {
[INFO] [stdout]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/store/hashtable.rs:128:38
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub fn insert(&mut self, key: K, value: V) -> Option<V> {
[INFO] [stdout]     |                                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/store/hashtable.rs:139:23
[INFO] [stdout]     |
[INFO] [stdout] 139 |     pub fn get(&self, key: &K) -> Option<&V> {
[INFO] [stdout]     |                       ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/store/hashtable.rs:147:31
[INFO] [stdout]     |
[INFO] [stdout] 147 |     pub fn get_mut(&mut self, key: &K) -> Option<&mut V> {
[INFO] [stdout]     |                               ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/store/hashtable.rs:153:30
[INFO] [stdout]     |
[INFO] [stdout] 153 |     pub fn remove(&mut self, key: &K) -> Option<V> {
[INFO] [stdout]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/store/ziplist.rs:42:13
[INFO] [stdout]    |
[INFO] [stdout] 42 |         let mut data = Vec::with_capacity(Self::HEADER_SIZE + 1);
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]   --> src/db.rs:30:13
[INFO] [stdout]    |
[INFO] [stdout] 30 |         for i in 0..16 {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]   --> src/store/ziplist.rs:68:33
[INFO] [stdout]    |
[INFO] [stdout] 68 |     pub fn push_back(&mut self, value: &[u8]) {
[INFO] [stdout]    |                                 ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]   --> src/store/ziplist.rs:78:34
[INFO] [stdout]    |
[INFO] [stdout] 78 |     pub fn push_front(&mut self, value: &[u8]) {
[INFO] [stdout]    |                                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]   --> src/store/ziplist.rs:97:23
[INFO] [stdout]    |
[INFO] [stdout] 97 |     pub fn get(&self, index: usize) -> Option<Vec<u8>> {
[INFO] [stdout]    |                       ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/store/ziplist.rs:104:30
[INFO] [stdout]     |
[INFO] [stdout] 104 |     pub fn remove(&mut self, index: usize) -> Option<Vec<u8>> {
[INFO] [stdout]     |                              ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/store/ziplist.rs:111:30
[INFO] [stdout]     |
[INFO] [stdout] 111 |     fn try_encode_int(&self, value: &[u8]) -> Option<(Encoding, i64)> {
[INFO] [stdout]     |                              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `len`
[INFO] [stdout]    --> src/store/ziplist.rs:118:31
[INFO] [stdout]     |
[INFO] [stdout] 118 |     fn encode_prev_len(&self, len: usize) -> Vec<u8> {
[INFO] [stdout]     |                               ^^^ help: if this is intentional, prefix it with an underscore: `_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `offset`
[INFO] [stdout]    --> src/store/ziplist.rs:126:31
[INFO] [stdout]     |
[INFO] [stdout] 126 |     fn decode_prev_len(&self, offset: usize) -> (usize, usize) {
[INFO] [stdout]     |                               ^^^^^^ help: if this is intentional, prefix it with an underscore: `_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `prev_len`
[INFO] [stdout]    --> src/store/ziplist.rs:133:28
[INFO] [stdout]     |
[INFO] [stdout] 133 |     fn encode_entry(&self, prev_len: usize, value: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |                            ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_prev_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/store/ziplist.rs:133:45
[INFO] [stdout]     |
[INFO] [stdout] 133 |     fn encode_entry(&self, prev_len: usize, value: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |                                             ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `offset`
[INFO] [stdout]    --> src/store/ziplist.rs:140:28
[INFO] [stdout]     |
[INFO] [stdout] 140 |     fn decode_entry(&self, offset: usize) -> Option<ZipListEntry> {
[INFO] [stdout]     |                            ^^^^^^ help: if this is intentional, prefix it with an underscore: `_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]   --> src/store/timingwheel.rs:80:32
[INFO] [stdout]    |
[INFO] [stdout] 80 |     pub fn add_task(&mut self, data: T, delay: Duration) {
[INFO] [stdout]    |                                ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delay`
[INFO] [stdout]   --> src/store/timingwheel.rs:80:41
[INFO] [stdout]    |
[INFO] [stdout] 80 |     pub fn add_task(&mut self, data: T, delay: Duration) {
[INFO] [stdout]    |                                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_delay`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `elapsed`
[INFO] [stdout]    --> src/store/timingwheel.rs:101:31
[INFO] [stdout]     |
[INFO] [stdout] 101 |     pub fn advance(&mut self, elapsed: Duration) -> Vec<T> {
[INFO] [stdout]     |                               ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_elapsed`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delay`
[INFO] [stdout]    --> src/store/timingwheel.rs:109:30
[INFO] [stdout]     |
[INFO] [stdout] 109 |     fn calculate_slot(&self, delay: Duration) -> (usize, usize) {
[INFO] [stdout]     |                              ^^^^^ help: if this is intentional, prefix it with an underscore: `_delay`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]    --> src/store/timingwheel.rs:166:32
[INFO] [stdout]     |
[INFO] [stdout] 166 |     pub fn add_task(&mut self, data: T, delay: Duration) {
[INFO] [stdout]     |                                ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delay`
[INFO] [stdout]    --> src/store/timingwheel.rs:166:41
[INFO] [stdout]     |
[INFO] [stdout] 166 |     pub fn add_task(&mut self, data: T, delay: Duration) {
[INFO] [stdout]     |                                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_delay`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]   --> src/db.rs:30:13
[INFO] [stdout]    |
[INFO] [stdout] 30 |         for i in 0..16 {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0432, E0433.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0432`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `mini-redis` (bin "mini-redis") due to 5 previous errors; 48 warnings emitted
[INFO] [stdout] Some errors have detailed explanations: E0432, E0433.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0432`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `mini-redis` (bin "mini-redis" test) due to 5 previous errors; 48 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "fdb9e664c1267dcbc39cc51aec25321939d08ced2c8ce759b871f61c245f51f3", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "fdb9e664c1267dcbc39cc51aec25321939d08ced2c8ce759b871f61c245f51f3", kill_on_drop: false }`
[INFO] [stdout] fdb9e664c1267dcbc39cc51aec25321939d08ced2c8ce759b871f61c245f51f3
